<!DOCTYPE html>
<html>

<head>

<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<title>README</title>


<style type="text/css">
body {
  font-family: Helvetica, arial, sans-serif;
  font-size: 14px;
  line-height: 1.6;
  padding-top: 10px;
  padding-bottom: 10px;
  background-color: white;
  padding: 30px; }

body > *:first-child {
  margin-top: 0 !important; }
body > *:last-child {
  margin-bottom: 0 !important; }

a {
  color: #4183C4; }
a.absent {
  color: #cc0000; }
a.anchor {
  display: block;
  padding-left: 30px;
  margin-left: -30px;
  cursor: pointer;
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0; }

h1, h2, h3, h4, h5, h6 {
  margin: 20px 0 10px;
  padding: 0;
  font-weight: bold;
  -webkit-font-smoothing: antialiased;
  cursor: text;
  position: relative; }

h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, h5:hover a.anchor, h6:hover a.anchor {
  background: url() no-repeat 10px center;
  text-decoration: none; }

h1 tt, h1 code {
  font-size: inherit; }

h2 tt, h2 code {
  font-size: inherit; }

h3 tt, h3 code {
  font-size: inherit; }

h4 tt, h4 code {
  font-size: inherit; }

h5 tt, h5 code {
  font-size: inherit; }

h6 tt, h6 code {
  font-size: inherit; }

h1 {
  font-size: 28px;
  color: black; }

h2 {
  font-size: 24px;
  border-bottom: 1px solid #cccccc;
  color: black; }

h3 {
  font-size: 18px; }

h4 {
  font-size: 16px; }

h5 {
  font-size: 14px; }

h6 {
  color: #777777;
  font-size: 14px; }

p, blockquote, ul, ol, dl, li, table, pre {
  margin: 15px 0; }

hr {
  background: transparent url() repeat-x 0 0;
  border: 0 none;
  color: #cccccc;
  height: 4px;
  padding: 0;
}

body > h2:first-child {
  margin-top: 0;
  padding-top: 0; }
body > h1:first-child {
  margin-top: 0;
  padding-top: 0; }
  body > h1:first-child + h2 {
    margin-top: 0;
    padding-top: 0; }
body > h3:first-child, body > h4:first-child, body > h5:first-child, body > h6:first-child {
  margin-top: 0;
  padding-top: 0; }

a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
  margin-top: 0;
  padding-top: 0; }

h1 p, h2 p, h3 p, h4 p, h5 p, h6 p {
  margin-top: 0; }

li p.first {
  display: inline-block; }
li {
  margin: 0; }
ul, ol {
  padding-left: 30px; }

ul :first-child, ol :first-child {
  margin-top: 0; }

dl {
  padding: 0; }
  dl dt {
    font-size: 14px;
    font-weight: bold;
    font-style: italic;
    padding: 0;
    margin: 15px 0 5px; }
    dl dt:first-child {
      padding: 0; }
    dl dt > :first-child {
      margin-top: 0; }
    dl dt > :last-child {
      margin-bottom: 0; }
  dl dd {
    margin: 0 0 15px;
    padding: 0 15px; }
    dl dd > :first-child {
      margin-top: 0; }
    dl dd > :last-child {
      margin-bottom: 0; }

blockquote {
  border-left: 4px solid #dddddd;
  padding: 0 15px;
  color: #777777; }
  blockquote > :first-child {
    margin-top: 0; }
  blockquote > :last-child {
    margin-bottom: 0; }

table {
  padding: 0;border-collapse: collapse; }
  table tr {
    border-top: 1px solid #cccccc;
    background-color: white;
    margin: 0;
    padding: 0; }
    table tr:nth-child(2n) {
      background-color: #f8f8f8; }
    table tr th {
      font-weight: bold;
      border: 1px solid #cccccc;
      margin: 0;
      padding: 6px 13px; }
    table tr td {
      border: 1px solid #cccccc;
      margin: 0;
      padding: 6px 13px; }
    table tr th :first-child, table tr td :first-child {
      margin-top: 0; }
    table tr th :last-child, table tr td :last-child {
      margin-bottom: 0; }

img {
  max-width: 100%; }

span.frame {
  display: block;
  overflow: hidden; }
  span.frame > span {
    border: 1px solid #dddddd;
    display: block;
    float: left;
    overflow: hidden;
    margin: 13px 0 0;
    padding: 7px;
    width: auto; }
  span.frame span img {
    display: block;
    float: left; }
  span.frame span span {
    clear: both;
    color: #333333;
    display: block;
    padding: 5px 0 0; }
span.align-center {
  display: block;
  overflow: hidden;
  clear: both; }
  span.align-center > span {
    display: block;
    overflow: hidden;
    margin: 13px auto 0;
    text-align: center; }
  span.align-center span img {
    margin: 0 auto;
    text-align: center; }
span.align-right {
  display: block;
  overflow: hidden;
  clear: both; }
  span.align-right > span {
    display: block;
    overflow: hidden;
    margin: 13px 0 0;
    text-align: right; }
  span.align-right span img {
    margin: 0;
    text-align: right; }
span.float-left {
  display: block;
  margin-right: 13px;
  overflow: hidden;
  float: left; }
  span.float-left span {
    margin: 13px 0 0; }
span.float-right {
  display: block;
  margin-left: 13px;
  overflow: hidden;
  float: right; }
  span.float-right > span {
    display: block;
    overflow: hidden;
    margin: 13px auto 0;
    text-align: right; }

code, tt {
  margin: 0 2px;
  padding: 0 5px;
  white-space: nowrap;
  border: 1px solid #eaeaea;
  background-color: #f8f8f8;
  border-radius: 3px; }

pre code {
  margin: 0;
  padding: 0;
  white-space: pre;
  border: none;
  background: transparent; }

.highlight pre {
  background-color: #f8f8f8;
  border: 1px solid #cccccc;
  font-size: 13px;
  line-height: 19px;
  overflow: auto;
  padding: 6px 10px;
  border-radius: 3px; }

pre {
  background-color: #f8f8f8;
  border: 1px solid #cccccc;
  font-size: 13px;
  line-height: 19px;
  overflow: auto;
  padding: 6px 10px;
  border-radius: 3px; }
  pre code, pre tt {
    background-color: transparent;
    border: none; }

sup {
    font-size: 0.83em;
    vertical-align: super;
    line-height: 0;
}

kbd {
  display: inline-block;
  padding: 3px 5px;
  font-size: 11px;
  line-height: 10px;
  color: #555;
  vertical-align: middle;
  background-color: #fcfcfc;
  border: solid 1px #ccc;
  border-bottom-color: #bbb;
  border-radius: 3px;
  box-shadow: inset 0 -1px 0 #bbb
}

* {
	-webkit-print-color-adjust: exact;
}
@media screen and (min-width: 914px) {
    body {
        width: 854px;
        margin:0 auto;
    }
}
@media print {
	table, pre {
		page-break-inside: avoid;
	}
	pre {
		word-wrap: break-word;
	}
  body {
    padding: 2cm; 
  }
}
</style>


</head>

<body>

<h1 id="toc_0">MacGesture</h1>

<p><img src="https://raw.githubusercontent.com/MacGesture/MacGesture/master/logo.png" alt="logo"></p>

<p>Configurable global mouse gestures for macOS.</p>

<blockquote>
<p>You can read this <code>README</code> file in <strong>About</strong> section in App Preferences.</p>
</blockquote>

<h2 id="toc_1">Installation</h2>

<h3 id="toc_2">Automatic Update</h3>

<p>MacGesture will regularly check for updates and prompt you when new version is available. 👍</p>

<h3 id="toc_3">Manually</h3>

<p>Download the latese release bundle from <a href="https://github.com/MacGesture/MacGesture/releases">GitHub releases</a> page.</p>

<h3 id="toc_4">Homebrew</h3>

<p>Simply use <code>brew install --cask macgesture</code>. 🙌</p>

<h2 id="toc_5">Features</h2>

<ul>
<li>Global mouse gestures recognition</li>
<li>Configurable shortcut invocation by gesture</li>
<li>App filtering based on bundle identifiers</li>
</ul>

<h2 id="toc_6">Gestures Format</h2>

<table>
<thead>
<tr>
<th>Gesture</th>
<th style="text-align: center">Acronym</th>
</tr>
</thead>

<tbody>
<tr>
<td>Move Left</td>
<td style="text-align: center"><code>L</code></td>
</tr>
<tr>
<td>Move Up</td>
<td style="text-align: center"><code>U</code></td>
</tr>
<tr>
<td>Move Right</td>
<td style="text-align: center"><code>R</code></td>
</tr>
<tr>
<td>Move Down</td>
<td style="text-align: center"><code>D</code></td>
</tr>
<tr>
<td>Left Button</td>
<td style="text-align: center"><code>Z</code></td>
</tr>
<tr>
<td>Wheel Up</td>
<td style="text-align: center"><code>u</code></td>
</tr>
<tr>
<td>Wheel Dp</td>
<td style="text-align: center"><code>d</code></td>
</tr>
</tbody>
</table>

<p>Gestures can contain wildcard matching (<code>?</code> and <code>*</code>).</p>

<p>The first rule matching will take effect.</p>

<p><code>Z</code> is the acronym of pinyin of <code>左</code> which means “left” in English. So to distinguish <em>clicking the left mouse button</em> from <em>dragging your mouse to the left</em>, we chose letter <code>Z</code>.</p>

<p>Wheel directions may vary according to system configuration (Natural scroll direction setting) or some system tweaks (Karabiner&#39;s Reverse Vertical Scrolling, for example).</p>

<h2 id="toc_7">Known Issues</h2>

<h3 id="toc_8">Right click does not work in some Java applications</h3>

<p>An imperfect fix:
Take WebStorm for example, open Preferences, then KeyMap, set the shortcut of “Show Context Menu” to <code>Button3 Click</code>.</p>

<h3 id="toc_9">Cannot assign some system-wide shortcuts to rules</h3>

<p>Reason:
macOS respond to system-wide shortcuts before MacGesture.</p>

<p>Fix:
Disable the shortcut first (for example in System Preferences → Keyboard → Shortcuts), then assign the shortcut in MacGesture, and re-enable the shortcut.</p>

<p>Caveats:
Some shortcuts still don&#39;t work with the fix above. When you are encountering this, here are two possible solutions:</p>

<ul>
<li>Change them to others (e.g. <code>⌃0</code>, <code>⌃9</code>).</li>
<li>Tick “Invert Fn When Control Is Pressed” option.</li>
</ul>

<h2 id="toc_10">Tips</h2>

<h3 id="toc_11">Basic gestures</h3>

<p>The following table covers probably the most basic scenario of usage:</p>

<table>
<thead>
<tr>
<th style="text-align: center">Gesture</th>
<th style="text-align: left">Filter</th>
<th style="text-align: center">Action</th>
<th style="text-align: center">Note</th>
<th style="text-align: center">⚡️</th>
</tr>
</thead>

<tbody>
<tr>
<td style="text-align: center"><code>D</code></td>
<td style="text-align: left"><code>*safari</code>&#124;<code>*chrome</code></td>
<td style="text-align: center">⌘T</td>
<td style="text-align: center">New Tab</td>
<td style="text-align: center">–</td>
</tr>
<tr>
<td style="text-align: center"><code>DR</code></td>
<td style="text-align: left"><code>*safari</code>&#124;<code>*chrome</code></td>
<td style="text-align: center">⌘W</td>
<td style="text-align: center">Close</td>
<td style="text-align: center">–</td>
</tr>
</tbody>
</table>

<p>By setting these rules, you can empower mouse gestures to open new and close currently focused tabs in Sarari and Chrome Browsers. Simply:</p>

<ul>
<li>press the right button, drag mouse down, and release

<ul>
<li>opens a new tab in the current browser window</li>
</ul></li>
<li>press the right button, drag mouse down, then to the right, and release

<ul>
<li>this will result in closing the currently focused tab in the active browser window</li>
</ul></li>
</ul>

<p>How neat! 🙌</p>

<h3 id="toc_12">Mouse scroll gesture example</h3>

<p>Now, to quickly cycle between the selected tabs even without releasing the right mouse button, you can set the gesture to be triggered on every match using the “⚡️” checkbox at the end of the Rule line.</p>

<p>So by defining the following rules:</p>

<table>
<thead>
<tr>
<th style="text-align: center">Gesture</th>
<th style="text-align: left">Filter</th>
<th style="text-align: center">Action</th>
<th style="text-align: center">Note</th>
<th style="text-align: center">⚡️</th>
</tr>
</thead>

<tbody>
<tr>
<td style="text-align: center"><code>U*u</code></td>
<td style="text-align: left"><code>*safari</code>&#124;<code>*chrome</code></td>
<td style="text-align: center">⇧⌘[</td>
<td style="text-align: center">Prev Tab</td>
<td style="text-align: center">☑️</td>
</tr>
<tr>
<td style="text-align: center"><code>U*d</code></td>
<td style="text-align: left"><code>*safari</code>&#124;<code>*chrome</code></td>
<td style="text-align: center">⇧⌘]</td>
<td style="text-align: center">Next Tab</td>
<td style="text-align: center">☑️</td>
</tr>
</tbody>
</table>

<p>you can simply:</p>

<ul>
<li>right click, drag mouse upwards, and every <code>u</code> (mouse wheel scroll up) triggers a <strong>Prev Tab</strong> action,</li>
<li>right click, drag mouse upwards, and every <code>d</code> (mouse wheel scroll down) triggers a <strong>Next Tab</strong> action.</li>
</ul>

<p>Switching between multiple tabs in the browser is now a piece of cake! 😎</p>

<h3 id="toc_13">Exporting and importing MacGesture preferences</h3>

<h4 id="toc_14">Recommended way</h4>

<p>Use “Import” and “Export” buttons in the <strong>General</strong> Panel.</p>

<h4 id="toc_15">Geek-ish way</h4>

<p>Open the <em>Terminal</em> app, Do this in your old computer:</p>

<div><pre><code class="language-shell">defaults read com.codefalling.MacGesture backup.plist</code></pre></div>

<p>And then copy that file to your new computer, then:</p>

<div><pre><code class="language-shell">defaults import com.codefalling.MacGesture backup.plist</code></pre></div>

<p>All settings should be successfully brought over. If that&#39;s not the case please file an issue.</p>

<h3 id="toc_16">Excluding an app in a certain rule</h3>

<p>You can prepend <code>!</code>, then the app you want to exclude (still wildcard).</p>

<p>For example, the original one:</p>

<table>
<thead>
<tr>
<th style="text-align: center">Gesture</th>
<th style="text-align: left">Filter</th>
<th style="text-align: center">Action</th>
<th style="text-align: center">Note</th>
<th style="text-align: center">⚡️</th>
</tr>
</thead>

<tbody>
<tr>
<td style="text-align: center"><code>U*d</code></td>
<td style="text-align: left"><code>*</code></td>
<td style="text-align: center">⇧⌘]</td>
<td style="text-align: center">Next Tab</td>
<td style="text-align: center">☑️</td>
</tr>
</tbody>
</table>

<p>Then, in order to exclude Safari, change this to:</p>

<table>
<thead>
<tr>
<th style="text-align: center">Gesture</th>
<th style="text-align: left">Filter</th>
<th style="text-align: center">Action</th>
<th style="text-align: center">Note</th>
<th style="text-align: center">⚡️</th>
</tr>
</thead>

<tbody>
<tr>
<td style="text-align: center"><code>U*d</code></td>
<td style="text-align: left"><code>*</code>&#124;<code>!*safari</code></td>
<td style="text-align: center">⇧⌘]</td>
<td style="text-align: center">Next Tab</td>
<td style="text-align: center">☑️</td>
</tr>
</tbody>
</table>

<p>Then you will experience the expected behaviour.</p>

<h2 id="toc_17">Found a Bug?</h2>

<p>Feel free to open <a href="https://github.com/MacGesture/MacGesture/issues">an issue on GitHub</a>! 👍</p>

<h2 id="toc_18">Contributors</h2>

<ul>
<li><a href="https://github.com/xcodebuild">CodeFalling</a> – original author</li>
<li><a href="https://github.com/username0x0a">username0x0a</a> – maintainer</li>
<li><a href="https://github.com/jiegec">jiegec</a></li>
<li><a href="https://github.com/zhangciwu">zhangciwu</a></li>
</ul>

<h2 id="toc_19">License</h2>

<p>This project is made under <a href="https://en.wikipedia.org/wiki/GNU_General_Public_License">GNU General Public License</a>.</p>

<p>App icon &amp; other icons designed by <a href="https://github.com/username0x0a">username0x0a</a>.</p>




</body>

</html>
